package com.dao;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * 公共属性
 * 	1.数据库连接字符串
 *  2.驱动名
 *  3.数据库用户名
 *  4.数据库密码
 *  5.数据库连接
 * 公共的方法：
 *  1.获取数据库连接方法
 *  2.关闭数据库连接
 *  3.对于增、删、改的公共的方法
 *  
 * @author wujia
 *
 */
public class BaseDao {
	
	private String url = "jdbc:mysql://localhost:3306/cont";
	private String driver = "com.mysql.jdbc.Driver";
	private String username = "root";
	private String pwd = "123456";
	
//	private static String url;
//	private static String driver;
//	private static String username;
//	private static String pwd;
	
	// 数据库连接
	private Connection conn = null;
	
//	static {
//		init();
//	}
//	
//	private static void init() {
//		Properties params=new Properties();
//		String configFile = "jdbc.properties";//配置文件路径
//		//加载配置文件到输入流中
//		InputStream is=BaseDao.class.getClassLoader().getResourceAsStream(configFile);
//		//从输入流中读取属性列表
//		try {
//			params.load(is);
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		//根据指定的获取对应的值
//		driver=params.getProperty("driver123");
//		url=params.getProperty("url");
//		username=params.getProperty("user");
//		pwd=params.getProperty("password");
//	}
	
	/**
	 * 获取数据库连接
	 * @return
	 */
	public Connection getConnection() {
		try {
			if(conn==null||conn.isClosed()) {
				Class.forName(driver);
				conn = DriverManager.getConnection(url, username, pwd);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	/**
	 * 关闭连接
	 * @param conn
	 * @param stmt
	 * @param rs
	 */
	public void closeAll(Connection conn, Statement stmt, ResultSet rs) {
		try {
			if(rs!=null) {
				rs.close();
			}
			if(stmt!=null) {
				stmt.close();
			}
			if(conn!=null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 增删改的通用方法
	 * @param sql 执行的sql语句
	 * @param params sql语句中要注入的值
	 * @return 返回影响行数
	 * 注意：sql中?的个数、类型、顺序要和params一致
	 */
	public int executeUpdate(String sql,Object[] params) {
		int count = 0 ;
		try {
			conn = getConnection();// 获取数据库连接
			PreparedStatement pstmt = conn.prepareStatement(sql);
			if(params!=null&&params.length>0) {
				for(int i=0; i<params.length; i++) {
					pstmt.setObject(i+1, params[i]);
				}
			}
			count = pstmt.executeUpdate(); // 执行sql
			closeAll(conn, pstmt, null); // 关闭连接
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return count;
	}
	
	
}
